/**********************************
* timing.c
* Définition de la base de temps globale cadencée à la milliseconde
* Par Guillaume STRUB (MIQ4) le 22/02/2011
**********************************/

#include "../board.h"
/* GENERIC */
#include <dsp.h>

/* UTILS */
#include "timing.h"
#include "can.h"

volatile unsigned long gTimer; // date en ms

volatile unsigned long lastAnglesMAJ;
volatile unsigned long lastHeartbeatMAJ;
volatile unsigned long lastCapteursMAJ;
volatile unsigned long lastTelecommandeMAJ;
volatile unsigned long lastBatteryMAJ;

//! Interruption du timer 3, qui cadence la base de temps globale
/**
* Incrémente la base de temps cadencée en millisecondes
*/
void __attribute__((__interrupt__, auto_psv)) _T3Interrupt(void)
{
	gTimer++;		//incrémente le compteur de la base de temps
    IFS0bits.T3IF=0;	//baisse flag timer 3
}

unsigned long TimeoutIMU()
{
    if((gTimer - lastAnglesMAJ) > ANGLES_TIMEOUT)
    {
        if(gTimer - lastAnglesMAJ < 10000)
            return (gTimer - lastAnglesMAJ);
        else
            return 10000;
    }
    return 0;
}

unsigned long TimeoutCapteurs()
{
    if((gTimer - lastCapteursMAJ) > CAPTEURS_TIMEOUT)
    {
        return (gTimer - lastCapteursMAJ);
    }
    return 0;
}

unsigned long TimeoutTelecommande()
{
    if((gTimer - lastTelecommandeMAJ) > TELECOMMANDE_TIMEOUT)
    {
        return (gTimer - lastTelecommandeMAJ);
    }
    return 0;
}

unsigned long TimeoutHeartbeat()
{
    if((gTimer - lastHeartbeatMAJ) > HEARTBEAT_TIMEOUT)
    {
        return (gTimer - lastHeartbeatMAJ);
    }
    return 0;
}

unsigned long TimeoutBatterie()
{
    if((gTimer - lastBatteryMAJ) > BATTERY_TIMEOUT)
    {
        return (gTimer - lastBatteryMAJ);
    }
    return 0;
}
